package com.javaweb.secondhand_trading.service;

import com.javaweb.secondhand_trading.Dto.ProductDto;
import com.javaweb.secondhand_trading.entity.Product;
import com.javaweb.secondhand_trading.entity.ProductImage;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * 商品服务接口
 * 定义商品相关的业务逻辑操作
 */
public interface ProductService {

    /**
     * 添加商品
     * @param productDto 商品数据传输对象，包含商品基本信息
     * @param images 商品图片文件列表
     * @return 保存后的商品实体
     */
    Product addProduct(ProductDto productDto, List<MultipartFile> images);

    /**
     * 更新商品信息
     * @param productId 要更新的商品ID
     * @param productDto 商品数据传输对象，包含更新的商品信息
     * @param images 更新的商品图片文件列表
     * @return 更新后的商品实体
     */
    Product updateProduct(Integer productId, ProductDto productDto, List<MultipartFile> images);

    /**
     * 删除商品
     * @param productId 要删除的商品ID
     * @param userId 执行删除操作的用户ID（用于权限验证）
     */
    void deleteProduct(Integer productId, Integer userId);

    /**
     * 根据ID获取商品详情
     * @param productId 商品ID
     * @return 商品实体
     */
    Product getProductById(Integer productId);

    /**
     * 获取所有商品列表
     * @return 商品列表
     */
    List<Product> getAllProducts();

    /**
     * 获取指定用户的所有商品
     * @param userId 用户ID
     * @return 该用户的商品列表
     */
    List<Product> getUserProducts(Integer userId);

    /**
     * 根据关键词搜索商品
     * @param keyword 搜索关键词
     * @return 匹配的商品列表
     */
    List<Product> searchProducts(String keyword);

    /**
     * 保存商品图片
     * @param images 图片文件列表
     * @param productId 关联的商品ID
     * @return 保存后的商品图片实体列表
     */
    List<ProductImage> saveProductImages(List<MultipartFile> images, Integer productId);
}